using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.CompilerServices;
using TXLooker.Common.Core;
using System.Threading;
using TXLooker.Common;

namespace TXLooker.Core
{
    //internal class TFDataProvider : ITFDataProvider
    //{
    //    private System.Threading.Timer m_refreshTimer = null;

    //    ~TFDataProvider()
    //    {
    //        try
    //        {
    //            if( this.m_refreshTimer != null )
    //                this.m_refreshTimer.Dispose();
    //        }
    //        catch 
    //        { }
    //    }
    //    public TFDataProvider()
    //    {
    //    }

    //    public TimeSpan RefreshPeriod
    //    {
    //        get { return this.m_refreshPeriod; }
    //        set
    //        {
    //            if( this.m_refreshPeriod == value )
    //                return;

    //            this.m_refreshPeriod = value;

    //            RaiseRefreshPeriodChanged();
    //        }
    //    }
    //    private TimeSpan m_refreshPeriod = new TimeSpan( 0, 0, 120 );

    //    public event EventHandler RefreshPeriodChanged
    //    {
    //        add 
    //        {
    //            lock( m_syncRefreshPeriod )
    //            {
    //                this.m_RefreshPeriodChangedEH += value;
    //            }
    //        }
    //        remove
    //        {
    //            lock( m_syncRefreshPeriod )
    //            {
    //                this.m_RefreshPeriodChangedEH -= value;
    //            }
    //        }
    //    }
    //    private EventHandler m_RefreshPeriodChangedEH = null;
    //    private object m_syncRefreshPeriod = new object();

    //    private void RaiseRefreshPeriodChanged()
    //    {
    //        CommonGlobal.RaiseEventHandler( this.m_RefreshPeriodChangedEH, new object[] { this, EventArgs.Empty }, this.m_syncRefreshPeriod );
    //    }

    //    private void RefreshStores()
    //    { 
    //        lock( this.m_syncCachStores )
    //        {
    //            foreach( string key in this.m_cachStores.Keys )
    //            {
    //                WorkItemStore store = this.m_cachStores[key];

    //                try
    //                {
    //                    store.RefreshCache();
    //                }
    //                catch
    //                {
    //                    this.m_cachStores.Remove( key );
    //                }
    //            }
    //        }
    //    }

    //    #region Work Item Stores

    //    private Dictionary<string, WorkItemStore> m_cachStores = new Dictionary<string, WorkItemStore>();
    //    private object m_syncCachStores = new object();

    //    public WorkItemStore GetStore(string serverUri)
    //    {
    //        WorkItemStore store = null;

    //        lock( this.m_syncCachStores )
    //        {

    //            if( this.m_cachStores.ContainsKey( serverUri ) )
    //            {
    //                store = this.m_cachStores[serverUri];
    //                store.RefreshCache();
    //            }
    //            else 
    //            {
    //                store = new WorkItemStore( serverUri );
    //                this.m_cachStores.Add( serverUri, store );
    //            }
    //        }
    //        return store;
    //    }
    //    public WorkItemStore GetStore( Uri serverUri )
    //    {
    //        return this.GetStore( serverUri.ToString() );
    //    }

    //    #endregion Work Item Stores

    //    public void StartPeriodicalRefresh()
    //    {
    //        TimerCallback callback = delegate( object state ) { this.RefreshStores(); };
    //        this.m_refreshTimer = new System.Threading.Timer( callback, null, TimeSpan.Zero, this.RefreshPeriod );

    //        //for refresh stores cach and connections
    //        this.RefreshPeriodChanged += delegate { this.m_refreshTimer.Change( TimeSpan.Zero, this.RefreshPeriod ); };
    //    }
    //}
}
